/**
 * @file 笔记类型定义
 * @description 前端笔记相关的类型定义
 * @author AI Assistant
 * @version 1.0.0
 * @since 2025-10-30
 */

/**
 * 时间线类型枚举
 */
export type NoteType =
  | 'note' // 笔记
  | 'event' // 日程
  | 'task' // 任务
  | 'inperson' // 现场会面
  // 社交/通讯渠道
  | 'email'
  | 'linkedin'
  | 'facebook'
  | 'x'
  | 'wechat'
  | 'phone'
  | 'qq'
  | 'skype'
  | 'telegram'
  | 'icq'
  | 'whatsapp'
  | 'line'

/**
 * 用户信息接口
 */
export interface User {
  id: number
  name: string
  avatar?: string
  email?: string
}

/**
 * 笔记数据接口
 */
export interface Note {
  id: number
  type: NoteType
  title?: string
  content: string
  company_id?: number
  company_name?: string
  contact_id?: number
  contact_name?: string
  attachments?: string[]
  images?: Array<{ url: string; width?: number; height?: number; alt?: string }>

  tags?: string[]
  // 互动统计（可选）
  like_count?: number
  comment_count?: number

  is_synced: boolean
  server_id?: string
  created_at: number
  updated_at: number
  // 用户信息
  user?: User
  user_id?: number
  user_name?: string
  user_avatar?: string
  // 事件特有字段
  event_start_time?: number // 事件开始时间
  event_end_time?: number // 事件结束时间
  event_location?: string // 事件地点
  event_attendees?: string[] // 参与者
  event_attendee_users?: User[] // 参与者（结构化，带头像）

  // 通用方向与参与方（除 'note' 和 'event' 外都适用）
  is_outbound?: boolean // 是否外发（我方->对方）
  from_user?: User // 发出方（结构化）
  to_users?: User[] // 接收方（结构化，多人）
  from?: string // 发出方（原始字符串，备用）
  to?: string[] // 接收方（原始字符串，备用）

  // 通用消息字段（主要用于邮件/IM 等）
  subject?: string // 主题（如邮件主题）
  cc?: string[] // 抄送（如邮件）
}

/**
 * 创建笔记输入
 */
export interface CreateNoteInput {
  type: NoteType
  title?: string
  content: string
  company_id?: number
  company_name?: string
  contact_id?: number
  contact_name?: string
  attachments?: string[]
  images?: Array<{ url: string; width?: number; height?: number; alt?: string }>

  tags?: string[]
}

/**
 * 更新笔记输入
 */
export interface UpdateNoteInput {
  id: number
  title?: string
  content?: string
  company_id?: number
  company_name?: string
  contact_id?: number
  contact_name?: string
  attachments?: string[]
  images?: Array<{ url: string; width?: number; height?: number; alt?: string }>

  tags?: string[]
}

/**
 * 查询笔记参数
 */
export type NoteCategory = 'mail' | 'calendar' | 'note'

export interface QueryNoteParams {
  // 简化后的筛选类别（UI使用）：note（普通笔记）、mail（邮件）、calendar（日历/事件）
  category?: NoteCategory
  // 精确类型筛选（服务端使用）：email / event / note
  type?: NoteType
  company_id?: number
  contact_id?: number

  keyword?: string
  limit?: number
  offset?: number
  order_by?: 'created_at' | 'updated_at'
  order_direction?: 'asc' | 'desc'
  created_at_from?: number
  created_at_to?: number
}

/**
 * 数据库操作结果
 */
export interface DatabaseResult<T = any> {
  success: boolean
  data?: T
  error?: string
  count?: number
}
